#    SUSAN® - Sole of Unix Save ANything
#
#   Copyright (C) 2020-2020 Hechzh Property
#
#   This program is Free Software; you can redistribute it and/or
#   modify it under the terms of version three of the GNU Affero General Public
#   License as published by the Free Software Foundation and included
#   in the file LICENSE.
#
#   This program is distributed in the hope that it will be useful, but
#   WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#   Affero General Public License for more details.
#
#   You should have received a copy of the GNU Affero General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
#   02110-1301, USA.

if(Python2_FOUND)
  add_library(python-fd MODULE python-fd.cc)
  set_target_properties(
    python-fd PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY ..
  )
  install(
    TARGETS python-fd
    DESTINATION ${plugindir}
    COMPONENT filedaemon
  )
  target_link_libraries(python-fd ${Python2_LIBRARIES} susan)
  target_include_directories(python-fd PUBLIC SYSTEM ${Python2_INCLUDE_DIRS})
  target_compile_definitions(python-fd PUBLIC PY2MODDIR=\"${Python2_SITELIB}\")
  add_dependencies(susan-fd python-fd)
  add_dependencies(python-fd susanfd-python2-module)
endif()

if(Python3_FOUND)
  add_library(python3-fd MODULE python-fd.cc)
  set_target_properties(
    python3-fd PROPERTIES PREFIX "" LIBRARY_OUTPUT_DIRECTORY ..
  )
  install(
    TARGETS python3-fd
    DESTINATION ${plugindir}
    COMPONENT filedaemon
  )
  target_link_libraries(python3-fd ${Python3_LIBRARIES} susan)
  target_include_directories(python3-fd PUBLIC SYSTEM ${Python3_INCLUDE_DIRS})
  target_compile_definitions(python3-fd PUBLIC PY3MODDIR=\"${Python3_SITELIB}\")
  add_dependencies(susan-fd python3-fd)
  add_dependencies(python3-fd susanfd-python3-module)
endif()

if(Python2_FOUND)
  add_executable(susanfd-python2-module-tester test/python-fd-module-tester.cc)
  target_link_libraries(
    susanfd-python2-module-tester ${Python2_LIBRARIES} susan
  )
  target_include_directories(
    susanfd-python2-module-tester PUBLIC SYSTEM ${Python2_INCLUDE_DIRS}
  )

  add_test(NAME susanfd-python2-module-tester
           COMMAND ${CMAKE_CURRENT_BINARY_DIR}/susanfd-python2-module-tester
  )
  set_property(
    TEST susanfd-python2-module-tester
    PROPERTY
      ENVIRONMENT
      PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/test/:${CMAKE_CURRENT_BINARY_DIR}/pythonmodules:${CMAKE_CURRENT_SOURCE_DIR}/pyfiles
  )
endif()

if(Python3_FOUND AND NOT HAVE_WIN32)
  add_executable(susanfd-python3-module-tester test/python-fd-module-tester.cc)
  target_link_libraries(
    susanfd-python3-module-tester ${Python3_LIBRARIES} susan
  )
  target_include_directories(
    susanfd-python3-module-tester PUBLIC SYSTEM ${Python3_INCLUDE_DIRS}
  )

  add_test(NAME susanfd-python3-module-tester
           COMMAND ${CMAKE_CURRENT_BINARY_DIR}/susanfd-python3-module-tester
  )
  set_property(
    TEST susanfd-python3-module-tester
    PROPERTY
      ENVIRONMENT
      PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}/test/:${CMAKE_CURRENT_BINARY_DIR}/python3modules:${CMAKE_CURRENT_SOURCE_DIR}/pyfiles
  )
endif()

if(Python2_FOUND)
  add_library(susanfd-python2-module MODULE module/susanfd.cc)
  install(TARGETS susanfd-python2-module DESTINATION ${Python2_SITELIB})
  set_target_properties(
    susanfd-python2-module
    PROPERTIES PREFIX ""
               C_STANDARD 11
               # SUFFIX ${Python2_EXT_SUFFIX}
               LIBRARY_OUTPUT_DIRECTORY pythonmodules
               LIBRARY_OUTPUT_NAME susanfd
               LINK_FLAGS "${Python2_BLDSHARED_FLAGS}"
               LINKER_LANGUAGE CXX
               INCLUDE_DIRECTORIES "${pymod2_include_dirs}"
  )
  if(NOT "${Python2_CCSHARED}" STREQUAL "")
    set_property(
      TARGET susanfd-python2-module PROPERTY COMPILE_OPTIONS
                                              ${Python2_CCSHARED}
    )
  endif()
  target_link_libraries(susanfd-python2-module susan ${Python2_LIBRARIES})

  add_test(NAME susanfd-python2-module
           COMMAND ${Python2_EXECUTABLE}
                   ${CMAKE_CURRENT_SOURCE_DIR}/test/susanfd_test.py
  )
  set_property(
    TEST susanfd-python2-module
    PROPERTY
      ENVIRONMENT
      "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/pythonmodules:${CMAKE_CURRENT_SOURCE_DIR}/test"
      LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/../../../lib
  )
endif()

if(Python3_FOUND)
  add_library(susanfd-python3-module MODULE module/susanfd.cc)
  install(TARGETS susanfd-python3-module DESTINATION ${Python3_SITELIB})
  set_target_properties(
    susanfd-python3-module
    PROPERTIES PREFIX ""
               C_STANDARD 11
               SUFFIX ${Python3_EXT_SUFFIX}
               LIBRARY_OUTPUT_DIRECTORY python3modules
               LIBRARY_OUTPUT_NAME susanfd
               LINK_FLAGS "${Python3_BLDSHARED_FLAGS}"
               LINKER_LANGUAGE CXX
               INCLUDE_DIRECTORIES "${pymod3_include_dirs}"
  )
  if(NOT "${Python3_CCSHARED}" STREQUAL "")
    set_property(
      TARGET susanfd-python3-module PROPERTY COMPILE_OPTIONS
                                              ${Python3_CCSHARED}
    )
  endif()
  target_link_libraries(susanfd-python3-module susan ${Python3_LIBRARIES})

  add_test(NAME susanfd-python3-module
           COMMAND ${Python3_EXECUTABLE}
                   ${CMAKE_CURRENT_SOURCE_DIR}/test/susanfd_test.py
  )

  set_property(
    TEST susanfd-python3-module
    PROPERTY
      ENVIRONMENT
      "PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/python3modules:${CMAKE_CURRENT_SOURCE_DIR}/test"
      LD_LIBRARY_PATH=${CMAKE_CURRENT_BINARY_DIR}/../../../lib
  )
endif()

set(PYFILES
    pyfiles/SusanFdPluginBaseclass.py
    pyfiles/SusanFdWrapper.py
    pyfiles/SusanFdPluginLocalFileset.py
    pyfiles/SusanFdPluginLocalFilesBaseclass.py
    pyfiles/susan-fd-local-fileset.py
    ldap/susan-fd-ldap.py
    ldap/SusanFdPluginLDAP.py
    ovirt/susan-fd-ovirt.py
    ovirt/SusanFdPluginOvirt.py
    percona-xtrabackup/susan-fd-percona-xtrabackup.py
    percona-xtrabackup/SusanFdPluginPerconaXtraBackup.py
    postgres/susan-fd-postgres.py
    postgres/SusanFdPluginPostgres.py
    vmware/susan-fd-vmware.py
    vmware/SusanFdPluginVMware.py
    libcloud/SusanLibcloudApi.py
    libcloud/susan-fd-libcloud.py
    libcloud/SusanFdPluginLibcloud.py
)

install(
  FILES ${PYFILES}
  DESTINATION ${plugindir}
  COMPONENT filedaemon
)

install(
  DIRECTORY libcloud/susan_libcloud_api
  DESTINATION ${plugindir}
  COMPONENT filedaemon
)
